import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.*;

public class ZoneDessin extends JPanel implements PropertyChangeListener, MouseListener, MouseMotionListener{
	private static final long serialVersionUID = 1L;
	
	Dessin dessinCourant;
	CreateurDessin createurCourant;
	Color couleurCourante;
	Command commandeCourante;
	
	public ZoneDessin(CreateurDessin createur)
	{
		createurCourant = createur;
		addMouseListener(this);
		addMouseMotionListener(this);
		couleurCourante = Color.red;
		setBackground(Color.GRAY);
		dessinCourant = new DessinRectangle();
		commandeCourante = new cmdDessiner();
		setLayout(null);
		add(dessinCourant);
	}
	
	public void propertyChange(PropertyChangeEvent evt)
	{
		if(evt.getPropertyName() == "Couleur")
		{
			couleurCourante = (Color) evt.getNewValue();
		}
		else if(evt.getPropertyName() == "Forme")
		{
			createurCourant = (CreateurDessin)evt.getNewValue();
		}
		else if(evt.getPropertyName() == "Fonction")
		{
			commandeCourante = (Command)evt.getNewValue();
			Component[] c = this.getComponents();
			for(int i = 0 ; i < c.length ; i++)
			{
				commandeCourante.execute((Dessin)c[i]);
			}
		}
		
	}
	

	@Override
	public void mouseDragged(MouseEvent e) {
		int xDebut = dessinCourant.xDebut;
		int yDebut = dessinCourant.yDebut;
		int xFin = e.getX();
		int yFin = e.getY();
		dessinCourant.setBounds(	Math.min(xDebut, xFin), 
							Math.min(yDebut, yFin),
							Math.max(dessinCourant.xDebut,xFin) - Math.min(dessinCourant.xDebut, xFin), 
							Math.max(dessinCourant.yDebut, yFin) - Math.min(dessinCourant.yDebut,yFin)
						);
		repaint();
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		dessinCourant = createurCourant.creerDessin();
		dessinCourant.setColor(couleurCourante);
		ZoneDessin.this.add(dessinCourant,0);
		commandeCourante.execute(dessinCourant);
		dessinCourant.setBounds(e.getX(), e.getY(), 0, 0);
		dessinCourant.xDebut = e.getX();
		dessinCourant.yDebut = e.getY();
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		
	}

}
